package com.huawei.csi.tool.controller;

import com.huawei.csi.tool.config.GlobalConfig;
import com.huawei.csi.tool.config.constants.URLConstants;
import com.huawei.csi.tool.ui.alert.AboutAlert;
import com.huawei.csi.tool.util.OSUtil;
import com.huawei.csi.tool.util.ResourcesUtil;
import com.leewyatt.rxcontrols.animation.carousel.AnimHorMove;
import com.leewyatt.rxcontrols.controls.RXCarousel;
import com.leewyatt.rxcontrols.controls.RXToggleButton;
import com.leewyatt.rxcontrols.enums.DisplayMode;
import com.leewyatt.rxcontrols.pane.RXCarouselPane;
import javafx.application.Platform;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.text.Font;
import javafx.util.Duration;

import java.net.URL;
import java.util.ResourceBundle;

/**
 * 主题布局的控制，顶部按钮，与侧边按钮的注册，以及一些初始化注册
 * 侧边按钮：实现按钮点击页面滑动，可以看做把页面与按钮进行绑定，通过按钮点击后，展示不同页面（有点类似轮播图）
 *
 * @author lxw
 */
public class CJMainController implements Initializable {
    /**
     * 窗口是否置顶
     */
    private boolean isAlwaysTopBtn = true;
    @FXML
    private ToggleButton alwaysTopBtn;

    /**
     * 边框窗格
     */
    @FXML
    private BorderPane contentPane;

    /**
     * 图片视图：后面做一键换肤要用到，现在不搞
     */
    @FXML
    private ImageView skinImageView;

    @FXML
    private ToggleButton toggleBtn;

    /**
     * 按钮与页面的绑定组件
     */
    @FXML
    private ToggleGroup menuGroup;

    /**
     * 旋转木马：实现按钮与页面的切换的组件
     */
    @FXML
    private RXCarousel carousel;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        Font basicFont = GlobalConfig.baseFont;
        Font font14 = Font.font(basicFont.getFamily(), 14); // 字体（还没想好怎么用。先放着）
        alwaysTopBtn.setSelected(isAlwaysTopBtn); // 是否一直在窗口最前面，这个后续得改掉，可以选择
        alwaysTopBtn.selectedProperty().addListener((ob, ov, nv) -> {
            GlobalConfig.rootStage.setAlwaysOnTop(nv);
            isAlwaysTopBtn = nv;
        }); // 置顶按钮注册监听器
        carousel.setAutoSwitch(false);
        carousel.setHoverPause(false);
        carousel.setCarouselAnimation(new AnimHorMove(true));

        carousel.setAnimationTime(Duration.millis(128)); // 动画时间
        carousel.setArrowDisplayMode(DisplayMode.HIDE); // 设置箭头的显示模式
        carousel.setNavDisplayMode(DisplayMode.HIDE); // 设置导航显示模式
        RXCarouselPane svgPage = (RXCarouselPane) ResourcesUtil.loadFXML("analysis-page"); // 加载RXCarousel类型的页面
        carousel.getPaneList().add(svgPage);
        RXCarouselPane tutorialPage = (RXCarouselPane) ResourcesUtil.loadFXML("tutorial-page");
        carousel.getPaneList().add(tutorialPage);
        RXCarouselPane settingsPage = (RXCarouselPane) ResourcesUtil.loadFXML("settings-page"); // 全局参数设置页面
        carousel.getPaneList().add(settingsPage);

        ObservableList<Toggle> menuBtnList = menuGroup.getToggles();
        int size = menuBtnList.size();
        for (int i = 0; i < size; i++) {
            int index = i;
            RXToggleButton btn = (RXToggleButton) menuBtnList.get(i);
            btn.setOnAction(event -> carousel.setSelectedIndex(index));
        }
        menuGroup.selectedToggleProperty().addListener((ob, oldValue, newValue) -> {
            if (newValue == null) {
                return;
            }
            carousel.setDisable(false);
            carousel.setSelectedIndex(menuGroup.getToggles().indexOf(newValue));
        });
    }

    /**
     * 描述
     */
    @FXML
    void onClickAboutBtn(MouseEvent event) {
        new AboutAlert().showAndWait();
    }

    @FXML
    void onClickCloseBtn(MouseEvent event) {
        Platform.exit();
        System.exit(0);
    }

    /**
     * 这个是用来做换肤的，后面再说吧 切换皮肤
     */
    @FXML
    void onClickIvBtn(ActionEvent event) {
    }

    @FXML
    void onClickMiniBtn(MouseEvent event) {
        GlobalConfig.rootStage.setIconified(true);
    }

    @FXML
    void showCJCodeAction(ActionEvent event) {
        OSUtil.showDoc(URLConstants.CJ_CODE);

    }

    @FXML
    void showCJCommunityAction(ActionEvent event) {
        OSUtil.showDoc(URLConstants.CJ_COMMUNITY);

    }

    @FXML
    void showCJDocAction(ActionEvent event) {
        OSUtil.showDoc(URLConstants.CJ_DOC);
    }

    @FXML
    void showCJOnlineAction(ActionEvent event) {
        OSUtil.showDoc(URLConstants.CJ_ONLINE);
    }

}
